MSSQL Met vallen en opstaan
- Agile ultra light
Als je tabellen maakt en uittest volg je meestal het volgende patroon:
- CREATE en dan testen:
Eerst maak je de tabel en dan test je die met een paar INSERT’s, UPDATE’s, DELETE’s en SELECT’s. Als de tabel goed is ontworpen kan je die onmiddellijk gebruiken. Maar in het gewone leven is dat maar zelden zo… - CREATE en dan testen, ALTER en dan testen, ALTER en opnieuw testen:
meestal is het nodig om achteraf nog wijzigingen aan te brengen. - CREATE en testen, ALTER en testen en dan DROP, CREATE en opnieuw testen:
nadat je een tabel een paar keer hebt gewijzigd of omdat de tabel niet goed gemaakt was besluit je om van nul af te herbeginnen. Je wil de tabel verwijderen en je DLL wijzigen. Als je al de statements na de prompt hebt ingetypt mag je helemaal opnieuw beginnen. Het is een goed idee om je statements vanaf het begin op te slaan in wat we SQL scripts noemen. Dat zijn gewone tekstbestanden met de extensie sql die je in kladblok kan aanmaken, opslaan en weer openen. Als je Microsoft SQL Server Management Studio gebruikt heb je een handige tekstverwerker ter je beschikking om je scripts te maken.
- CREATE en dan testen:
- Scripts vs Visual Editor
Het is handiger om in dit opzicht met scripts te werken.
- Scripts maken in Microsoft SQL Server Management Studio
- Typ de statements in in de editor.
- Selecteer Save of Save As in het File menu en type de naam in van het sql bestand.
- Klik op Execute om het script uit te voeren.
- Als je het bestand opnieuw wil openen selecteer je Open en dan File in het File menu.
- Een voorbeeld van vallen en opstaan
We hebben onze tabel boeken gecreëerd. We hebben er boeken aan toegevoegd. En op een bepaald ogenblik merk je op dat je de mogelijkheid om de boeken te classificeren niet hebt voorzien. Je kan de script om de tabel te creëren wijzigen, de kolom van de categorie toevoegen en de script opnieuw uitvoeren. Maar dan worden alle gegevens die al in de tabel zitten verwijderd. I.p.v. de tabel opnieuw te creëren kan je het ALTER statement gebruiken om de structuur van de tabel te wijzigen zonder dat de gegevens vernietigd worden.
Klassificatie is een wetenschap op zich. Je zou kunnen kiezen om een eigen klassificatiesysteem uit te dokteren. Maar waarom zou je het warm water opnieuw uitvinden. De Nederlandse basisklassificatie[1] is ontwikkeld door bibliotheken uit Nederland. Er bestaan ook nog andere klassificatiesystemen zoals UDC[2] (Universele Decimale Classificatie) en SISO (Schema voor de Indeling van de Systematische catalogus in Openbare bibliotheken). Het NBK is eenvoudig, het UDC word het meest gebruikt en SISO wordt in de Openbare Bibliotheken gebruikt maar is moeilijk. Als je een algemeen gebruikt classificatiesysteem gebruikt zijn je boeken ook geordend volgens een standaard klassificatie en zijn de gegevens met bibliotheken uitwisselbaar. We laten de keuze van het klassificatiesysteem over aan de gebruiker en voorzien een kolom van 40 karakters lang.
De script ziet er dan zo uit:
use JefInghelbrecht go alter table Boeken add Categorie varchar(40) go
We slaan de script op in een bestand met de naam BoekenAddCategorie.sql. Op die manier houden we de wijzigingen bij en kunnen we later een nieuwe script maken op basis van de wijzigingen die tijdens het ontwikkelingproces zijn doorgevoerd.
We voegen een nieuwe rij toe om de wijziging te testen. We openen de BoekenAddRow.sql toe en passen de script aan. De kolom Categorie moet worden toegevoegd. Let erop dat we een nieuw boek toevoegen om geen dubbels te hebben.
use JefInghelbrecht insert into boeken (Id, Voornaam, Familienaam, Titel, Stad, Uitgeverij, Verschijningsdatum, Herdruk, Commentaar, Categorie) values ( 'Philipp', 'Blom', 'Wat op het spel staat', 'Amsterdam', 'De Bezige Bij', '2017', '', 'De Duitse historicus en journalist schetst een somber toekomstscenario. ', 'Essai' )
Later zullen we zien hoe je het vermijden van dubbels in SQL programmeert.
Je kan de volledige lijst met categorieën vinden op https://www.kb.nl/sites/default/files/docs/bc04.pdf
De officiële website van UDC in het Nederlands: http://www.udcc.org/.
- Oefening
We voegen de kolom met de naam Categorie toe.
-- ji -- 27 november 2012 -- Voeg de kolom Categorie toe aan de tabel -- Bestandsnaam: BoekenAlterCategorieAdd.sql -- Boeken use JefInghelbrecht go alter table Boeken add Categorie nvarchar(40) go
Sla dit script op in een sql bestand met de naam BoekenAlterCategorieAdd.sql.
- Oefening
We stellen vast dat de lengte van de kolom Categorie te kort is. We willen die langer maken:
-- ji -- 27 november 2012 -- Bestandsnaam: BoekenAlterCategorieAlter.sql -- use JefInghelbrecht go alter table Boeken alter column Categorie nvarchar(120) go
Sla dit script op in een sql bestand met de naam BoekenAlterCategorieAlter.sql.
- Opdracht
Een
InsertedBy
kolom toevoegenHet is handig om bij te houden wie het boek heeft geïnserted. Daarom willen we een extra kolom met de naam
InsertedBy
die 255 karakters lang is en nationale karakters moet kunnen bevatten.Schrijf een script die de kolom
InsertedBy
toevoegt.Sla de script op in een bestand met de naam BoekenAlterInsertedByAdd.sql.